﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data;

using QLTTAN.BLL;
using QLTTAN.DTO;
namespace QLTTAN.Form
{
    public partial class frmLichThiCuoiKhoa : DevExpress.XtraEditors.XtraForm
    {
        LopHocBLL LH_BLL;
        CT_LopHocBLL CT_LH_BLL;
        LichThiBLL LT_BLL;
        PhongHocBLL PH_BLL;
        KhoaHocBLL KH_BLL;        

        public int MaKhoaSelected = -1;
        public int MaLichThiSelected = -1;
        
        public frmLichThiCuoiKhoa()
        {
            InitializeComponent();
        }

        private void FillDataInLookUpEditLopHoc()
        {
            lookUpEditLopHoc.Properties.DataSource = LH_BLL.LopHoc_Load_MaxKhoaHoc();
            lookUpEditLopHoc.Properties.ValueMember = "MaLop";
            lookUpEditLopHoc.Properties.DisplayMember = "TenLoaiLop";
        }

        private void FillDataInLookUpEditPhongThi()
        {
            lookUpEditPhongThi.Properties.DataSource = PH_BLL.PhongHoc_Load();
            lookUpEditPhongThi.Properties.ValueMember = "MaPhong";
            lookUpEditPhongThi.Properties.DisplayMember = "TenPhong";
        }

        private void SetEnableControl(bool isEnable)
        {
            lookUpEditLopHoc.Enabled = isEnable;
            lookUpEditPhongThi.Enabled = isEnable;
            dateNgayThi.Enabled = isEnable;
            timeThoiGianThi.Enabled = isEnable;
            richtxtGhiChu.Enabled = isEnable;

            btnXuat.Enabled = !isEnable;
            btnSua.Enabled = !isEnable;
            btnLuu.Enabled = isEnable;
        }

        private void frmLichThiCuoiKhoa_Load(object sender, EventArgs e)
        {
            LH_BLL = new LopHocBLL();
            CT_LH_BLL = new CT_LopHocBLL();
            LT_BLL = new LichThiBLL();
            PH_BLL = new PhongHocBLL();
            KH_BLL = new KhoaHocBLL();

            FillDataInLookUpEditPhongThi();
            FillDataInLookUpEditLopHoc();

            SetEnableControl(true);

            try
            {
                // Thêm lịch thi.
                if (MaLichThiSelected == -1)
                {
                    KhoaHocDTO KH_DTO = new KhoaHocDTO();
                    KH_DTO.MaKhoaHoc = MaKhoaSelected;
                    DataRow r = KH_BLL.KhoaHoc_GetInfo(KH_DTO);
                    txtKhoaHoc.Text = r["TenKhoaHoc"].ToString();
                }
                else // Xem chi tiết lịch thi.
                {
                    LichThiDTO LT_DTO = new LichThiDTO();
                    LT_DTO.MaLichThi = MaLichThiSelected;

                    DataRow LichThiSelected = LT_BLL.LichThi_GetInfo(LT_DTO);

                    lookUpEditLopHoc.ItemIndex = lookUpEditLopHoc.Properties.GetDataSourceRowIndex("MaLop", LichThiSelected["MaLop"]);
                    lookUpEditPhongThi.ItemIndex = lookUpEditPhongThi.Properties.GetDataSourceRowIndex("MaPhong", LichThiSelected["MaPhong"]);
                    dateNgayThi.EditValue = (DateTime)LichThiSelected["NgayThi"];
                    timeThoiGianThi.EditValue = (TimeSpan)LichThiSelected["ThoiGianThi"];
                    richtxtGhiChu.Text = LichThiSelected["GhiChu"].ToString();

                    SetEnableControl(false);
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnXuat_Click(object sender, EventArgs e)
        {

        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            SetEnableControl(true);
            btnLuu.Enabled = true;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            string error = "";
            if (lookUpEditLopHoc.EditValue == null)
            {
                error += "Bạn chưa chọn lớp học. \r\n";
            }
            if (lookUpEditPhongThi.EditValue == null)
            {
                error += "Bạn chưa chọn phòng thi. \r\n";
            }
            if(dateNgayThi.Text.Trim().Equals(""))
            {
                error += "Bạn chưa chọn ngày thi. \r\n";
            }
            if (timeThoiGianThi == null)
            {
                error += "Bạn chưa chọn nhập gian thi. \r\n";
            }

            if (!error.Equals(""))
            {
                XtraMessageBox.Show(error, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            LichThiDTO LT_DTO = new LichThiDTO();
            LT_DTO.MaLop = int.Parse(lookUpEditLopHoc.EditValue.ToString());
            LT_DTO.MaPhong = int.Parse(lookUpEditPhongThi.EditValue.ToString());
            LT_DTO.NgayThi = (DateTime)dateNgayThi.EditValue;

            if (timeThoiGianThi.EditValue is DateTime)
                LT_DTO.ThoiGianThi = ((DateTime)timeThoiGianThi.EditValue).TimeOfDay;
            if (timeThoiGianThi.EditValue is TimeSpan)
                LT_DTO.ThoiGianThi = (TimeSpan)timeThoiGianThi.EditValue;

            LT_DTO.GhiChu = richtxtGhiChu.Text;

            try
            {
                if (MaLichThiSelected == -1)
                {
                    if (LT_BLL.LichThi_Insert(LT_DTO) > 0)
                    {
                        if (XtraMessageBox.Show("Lưu dữ liệu thành công.", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                            this.Close();
                    }
                        
                    else
                        XtraMessageBox.Show("Lưu dữ liệu thất bại.", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    LT_DTO.MaLichThi = MaLichThiSelected;

                    if (LT_BLL.LichThi_Update(LT_DTO) > 0)
                    {
                        if (XtraMessageBox.Show("Lưu dữ liệu thành công.", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                            this.Close();
                    }
                    else
                        XtraMessageBox.Show("Lưu dữ liệu thất bại.", "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            if (XtraMessageBox.Show("Bạn có chắc chắn muốn thoát khỏi màn hình Lịch Thi Cuối Khóa?\n Mọi thao tác của bạn sẽ không được lưu lại.",
                                    "Thông báo!!!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
                this.Close();
        }

        private void gridViewHocVien_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            if (e.Column.FieldName == "STT")
                e.DisplayText = (e.ListSourceRowIndex + 1).ToString();

            if (e.Column == GioiTinh)
            {
                e.DisplayText = ((bool)e.Value) == true ? "Nam" : "Nữ";
            }
        }

        private void lookUpEditLopHoc_EditValueChanged(object sender, EventArgs e)
        {
            if (lookUpEditLopHoc.EditValue != null)
            {
                try
                {
                    LopHocDTO LH_DTO = new LopHocDTO();
                    LH_DTO.MaLop = int.Parse(lookUpEditLopHoc.EditValue.ToString());

                    DataRow r = LH_BLL.LopHoc_GetInfo(LH_DTO);
                    txtChuongTrinhHoc.Text = r["TenChuongTrinh"].ToString();
                    txtKhoaHoc.Text = r["TenKhoaHoc"].ToString();
                    txtSiSo.Text = r["SiSo"].ToString();

                    CT_LopHocDTO CT_LH_DTO = new CT_LopHocDTO();
                    CT_LH_DTO.MaLop = LH_DTO.MaLop;
                    gridCtrlHocVien.DataSource = CT_LH_BLL.CT_LopHoc_Load(CT_LH_DTO);
                }
                catch (Exception ex)
                {
                    XtraMessageBox.Show(ex.Message, "Thông báo!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}